﻿using QldtSdh.GUI.Common;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using QldtSdh.BLL;
using QldtSdh.Utils;
using QldtSdh.GUI.Utils;
using QldtSdh.DAL.Models;
namespace QldtSdh.GUI.DuLieu
{
    public partial class FormQuanLyChuongTrinhDaoTao_ChiTiet : BaseDialog
    {
        bool allowUpdate = false;
        private ChuongTrinhDaoTao m_ChuongTrinhDaoTao;
        private bool m_IsAddNew;

        int countEntityToBeAdded = 0;
        public delegate void ChuongTrinhDaoTaoAddedEventHandler(ChuongTrinhDaoTao ctdt);
        public event ChuongTrinhDaoTaoAddedEventHandler OnChuongTrinhDaoTaoAdded;

        public FormQuanLyChuongTrinhDaoTao_ChiTiet(ChuongTrinhDaoTao chuongTrinhDaoTao)
        {
            InitializeComponent();
            m_IsAddNew = false;
            m_ChuongTrinhDaoTao = chuongTrinhDaoTao;

            LoadNganhDaoTao();
            allowUpdate = true;
            DisplayObjectToGui();
        }

        public FormQuanLyChuongTrinhDaoTao_ChiTiet()
            : this(BizChuongTrinhDaoTao.GetDefault())
        {
            m_IsAddNew = true;
            if (cmbNganhDaoTao.Items.Count > 0)
            {
                cmbNganhDaoTao.SelectedIndex = 0;
            }
        }

        private void DisplayObjectToGui()
        {
            chkTiepTucBoSung.Enabled = chkTiepTucBoSung.Visible = false;
            try { cmbNganhDaoTao.SelectedValue = m_ChuongTrinhDaoTao.MaNganhDaoTaoGUID; }
            catch { }
            cmbNganhDaoTao_SelectedIndexChanged(this, null);
            txtTenChuongTrinhDaoTao.Text = m_ChuongTrinhDaoTao.TenChuongTrinhDaoTao;
            txtKienThucChung.Text = m_ChuongTrinhDaoTao.SoTinChiTuChonPhaiChonTrongPhanChung.ToString();
            txtKienThucChuyenNganh.Text = m_ChuongTrinhDaoTao.SoTinChiTuChonPhaiChonTrongPhanChuyenNganh.ToString();
            txtKienThucCoSo.Text = m_ChuongTrinhDaoTao.SoTinChiTuChonPhaiChonTrongPhanCoSo.ToString();
        }

        //void InitInterface()
        //{
        //    if (m_ChuongTrinhDaoTao != null)
        //    {
        //        this.Text = string.Format(TITLE_FORM_DETAIL.EDIT, ENTITY_NAME.CHUONGTRINHDAOTAO);
        //        chkTiepTucBoSung.Enabled = chkTiepTucBoSung.Visible = false;
        //        cmbNganhDaoTao.SelectedValue = m_ChuongTrinhDaoTao.MaNganhDaoTaoGUID;
        //        cmbNganhDaoTao_SelectedIndexChanged(this, null);
        //        txtTenChuongTrinhDaoTao.Text = m_ChuongTrinhDaoTao.TenChuongTrinhDaoTao;
        //        txtKienThucChung.Text = m_ChuongTrinhDaoTao.SoTinChiTuChonPhaiChonTrongPhanChung.ToString();
        //        txtKienThucChuyenNganh.Text = m_ChuongTrinhDaoTao.SoTinChiTuChonPhaiChonTrongPhanChuyenNganh.ToString();
        //        txtKienThucCoSo.Text = m_ChuongTrinhDaoTao.SoTinChiTuChonPhaiChonTrongPhanCoSo.ToString();
        //    }
        //    else
        //    {
        //        this.Text = string.Format(TITLE_FORM_DETAIL.ADDNEW, ENTITY_NAME.CHUONGTRINHDAOTAO);
        //        chkTiepTucBoSung.Enabled = chkTiepTucBoSung.Visible = true;
        //        txtTenChuongTrinhDaoTao.Text = "";
        //        txtKienThucChung.Text = "";
        //        txtKienThucChuyenNganh.Text = "";
        //        txtKienThucCoSo.Text = "";
        //        if (cmbNganhDaoTao.SelectedIndex != -1)
        //        {
        //            cmbNganhDaoTao_SelectedIndexChanged(this, null);
        //        }
        //    }
        //    cmbNganhDaoTao.Focus();
        //}

        void LoadNganhDaoTao()
        {
            cmbNganhDaoTao.DataSource = BizChuyenNganhDaoTao.GetList();
            cmbNganhDaoTao.DisplayMember = "TenNganhDaoTao";
            cmbNganhDaoTao.ValueMember = "MaNganhDaoTaoGUID";
        }

        bool ValidateData()
        {
            errorNotify.Clear();
            if (cmbNganhDaoTao.SelectedIndex == -1)
            {
                errorNotify.SetError(cmbNganhDaoTao, string.Format(ERROR_CONSTANT_STRING.LOI_DANHSACHRONG, ENTITY_NAME.CHUYENGANHDAOTAO));
                btnBoQua.Focus();
                return false;
            }
            if (txtTenChuongTrinhDaoTao.Text.IsNullOrEmpty())
            {
                errorNotify.SetError(txtTenChuongTrinhDaoTao, string.Format(ERROR_CONSTANT_STRING.LOI_TENRONG, ENTITY_NAME.CHUONGTRINHDAOTAO));
                txtTenChuongTrinhDaoTao.Focus();
                return false;
            }
            if (txtKienThucChung.Text.IsNullOrEmpty())
            {
                errorNotify.SetError(txtKienThucChung, ERROR_CONSTANT_STRING.LOI_FIELD_EMPTY);
                txtKienThucChung.Focus();
                return false;
            }
            int i = 0;
            if (!int.TryParse(txtKienThucChung.Text, out i))
            {
                errorNotify.SetError(txtKienThucChung, "Bạn nhập sai thông tin");
                txtKienThucChung.Focus();
                return false;
            }
            if (txtKienThucCoSo.Text.IsNullOrEmpty())
            {
                errorNotify.SetError(txtKienThucCoSo, ERROR_CONSTANT_STRING.LOI_FIELD_EMPTY);
                txtKienThucCoSo.Focus();
                return false;
            }
            if (!int.TryParse(txtKienThucCoSo.Text, out i))
            {
                errorNotify.SetError(txtKienThucCoSo, "Bạn nhập sai thông tin");
                txtKienThucCoSo.Focus();
                return false;
            }
            if (txtKienThucChuyenNganh.Text.IsNullOrEmpty())
            {
                errorNotify.SetError(txtKienThucChuyenNganh, ERROR_CONSTANT_STRING.LOI_FIELD_EMPTY);
                txtKienThucChuyenNganh.Focus();
                return false;
            }
            if (!int.TryParse(txtKienThucChuyenNganh.Text, out i))
            {
                errorNotify.SetError(txtKienThucChuyenNganh, "Bạn nhập sai thông tin");
                txtKienThucChuyenNganh.Focus();
                return false;
            }
            return true;
        }

        private void cmbNganhDaoTao_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (allowUpdate)
            {
                var chuyenNganh = cmbNganhDaoTao.SelectedItem as NganhDaoTao;
                if (chuyenNganh != null)
                {
                    lbMaNganh.Text = chuyenNganh.MaNganhDaoTao;
                    //if (m_ChuongTrinhDaoTao == null)
                    if (m_IsAddNew)
                    {
                        txtTenChuongTrinhDaoTao.Text = string.Format("{0}-{1} từ khóa ...", chuyenNganh.MaNganhDaoTao, chuyenNganh.TenNganhDaoTao);
                    }
                }
            }
        }

        private void btnDongY_Click(object sender, EventArgs e)
        {
            if (ValidateData())
            {
                //if (m_ChuongTrinhDaoTao != null)
                if (m_IsAddNew == false)
                {
                    #region Cập nhật thông tin
                    try
                    {
                        var newCtdt = new ChuongTrinhDaoTao()
                        {
                            MaChuongTrinhDaoTaoGUID = m_ChuongTrinhDaoTao.MaChuongTrinhDaoTaoGUID,
                            MaNganhDaoTaoGUID = m_ChuongTrinhDaoTao.MaNganhDaoTaoGUID,
                            SoHocKyDaoTao = m_ChuongTrinhDaoTao.SoHocKyDaoTao,
                            SoTinChiTuChonPhaiChonTrongPhanChung = Convert.ToInt32(txtKienThucChung.Text.Trim()),
                            SoTinChiTuChonPhaiChonTrongPhanChuyenNganh = Convert.ToInt32(txtKienThucChuyenNganh.Text.Trim()),
                            SoTinChiTuChonPhaiChonTrongPhanCoSo = Convert.ToInt32(txtKienThucCoSo.Text.Trim()),
                            TenChuongTrinhDaoTao = txtTenChuongTrinhDaoTao.Text.Trim()
                        };
                        BizChuongTrinhDaoTao.Update(newCtdt);
                        m_ChuongTrinhDaoTao.TenChuongTrinhDaoTao = newCtdt.TenChuongTrinhDaoTao;
                        m_ChuongTrinhDaoTao.SoTinChiTuChonPhaiChonTrongPhanChung = newCtdt.SoTinChiTuChonPhaiChonTrongPhanChung;
                        m_ChuongTrinhDaoTao.SoTinChiTuChonPhaiChonTrongPhanChuyenNganh = newCtdt.SoTinChiTuChonPhaiChonTrongPhanChuyenNganh;
                        m_ChuongTrinhDaoTao.SoTinChiTuChonPhaiChonTrongPhanCoSo = newCtdt.SoTinChiTuChonPhaiChonTrongPhanCoSo;
                        m_ChuongTrinhDaoTao.MaNganhDaoTaoGUID = m_ChuongTrinhDaoTao.MaNganhDaoTaoGUID;
                        this.DialogResult = System.Windows.Forms.DialogResult.OK;
                        this.Close();
                    }
                    catch (InvalidNameException exc)
                    {
                        errorNotify.Clear();
                        errorNotify.SetError(txtTenChuongTrinhDaoTao, exc.Message);
                        txtTenChuongTrinhDaoTao.Focus();
                    }
                    catch (Exception exc)
                    {
                        DialogUtils.ShowErrorWithDefaultTitle("Không chỉnh sửa thông tin chương trình đào tạo được.\r\n" + exc.Message);
                    }
                    #endregion
                }
                else
                {
                    #region Thêm mới
                    var chuongTrinhDaoTao = new ChuongTrinhDaoTao();
                    chuongTrinhDaoTao.MaChuongTrinhDaoTaoGUID = m_ChuongTrinhDaoTao.MaChuongTrinhDaoTaoGUID;
                    chuongTrinhDaoTao.TenChuongTrinhDaoTao = txtTenChuongTrinhDaoTao.Text.Trim();
                    chuongTrinhDaoTao.SoTinChiTuChonPhaiChonTrongPhanChung = int.Parse(txtKienThucChung.Text.Trim());
                    chuongTrinhDaoTao.SoTinChiTuChonPhaiChonTrongPhanChuyenNganh = int.Parse(txtKienThucChuyenNganh.Text.Trim());
                    chuongTrinhDaoTao.SoTinChiTuChonPhaiChonTrongPhanCoSo = int.Parse(txtKienThucCoSo.Text.Trim());
                    chuongTrinhDaoTao.MaNganhDaoTaoGUID = cmbNganhDaoTao.SelectedValue.ToString();
                    try
                    {
                        BizChuongTrinhDaoTao.Add(chuongTrinhDaoTao);

                        countEntityToBeAdded++;
                        if (OnChuongTrinhDaoTaoAdded != null)
                            OnChuongTrinhDaoTaoAdded(chuongTrinhDaoTao);
                        if (chkTiepTucBoSung.Checked)
                        {
                            //m_ChuongTrinhDaoTao = null;
                            //InitInterface();
                            m_ChuongTrinhDaoTao = BizChuongTrinhDaoTao.GetDefault();
                            DisplayObjectToGui();
                            cmbNganhDaoTao_SelectedIndexChanged(null, null);
                        }
                        else
                        {
                            this.DialogResult = System.Windows.Forms.DialogResult.OK;
                            this.Close();
                        }
                    }
                    catch (InvalidNameException exc)
                    {
                        errorNotify.Clear();
                        errorNotify.SetError(txtTenChuongTrinhDaoTao, exc.Message);
                        txtTenChuongTrinhDaoTao.Focus();
                    }
                    catch (Exception exc)
                    {
                        DialogUtils.ShowErrorWithDefaultTitle("Không bổ sung chương trình đào tạo được.\r\n" + exc.Message);
                    }
                    #endregion
                }
            }
        }

        private void FormQuanLyChuongTrinhDaoTao_ChiTiet_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (countEntityToBeAdded > 0)
                this.DialogResult = System.Windows.Forms.DialogResult.OK;
        }
    }
}
